<?php
/**
 * User: LRZ
 * Date: 2020/2/22
 * Time: 16:27
 */

/**
 *  1154.一年中的第几天
 *
 *  标签：数学
 *
 *  给你一个按 YYYY-MM-DD 格式表示日期的字符串 date，请你计算并返回该日期是当年的第几天。
 *  通常情况下，我们认为 1 月 1 日是每年的第 1 天，1 月 2 日是每年的第 2 天，依此类推。每个月的天数与现行公元纪年法（格里高利历）一致。
 *
 *  示例 1：
 *      输入：date = "2019-01-09"
 *      输出：9
 *
 *  示例 2：
 *      输入：date = "2019-02-10"
 *      输出：41
 *
 *  示例 3：
 *      输入：date = "2003-03-01"
 *      输出：60
 *
 *  示例 4：
 *      输入：date = "2004-03-01"
 *      输出：61
 *   
 *  提示：
 *      date.length == 10
 *      date[4] == date[7] == '-'，其他的 date[i] 都是数字。
 *      date 表示的范围从 1900 年 1 月 1 日至 2019 年 12 月 31 日。
 *
 *  来源：力扣（LeetCode）
 *  链接：https://leetcode-cn.com/problems/day-of-the-year
 *  著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

$start = microtime(true);

$date = "2003-03-01";
$res  = dayOfYear($date);

$end = microtime(true);
print_r($res);
printf(' total run: %.2f s<br>' . 'memory usage: %.2f M<br> ', $end - $start, memory_get_usage() / 1024 / 1024);

function dayOfYear($date)
{
    $dateArr   = explode('-', $date);
    $res       = 0;
    $month[1]  = 31;
    $month[2]  = ($dateArr[0] % 4 === 0 && $dateArr[0] % 100 !== 0) || $dateArr[0] % 400 === 0 ? 29 : 28;
    $month[3]  = 31;
    $month[4]  = 30;
    $month[5]  = 31;
    $month[6]  = 30;
    $month[7]  = 31;
    $month[8]  = 31;
    $month[9]  = 30;
    $month[10] = 31;
    $month[11] = 30;
    $month[12] = 31;
    for ($i = $dateArr[1] - 1; $i >= 1; $i--) {
        $res += $month[$i];
    }
    return $res + $dateArr[2];
}